//内部申明

function foo(){
    var x=1;
    x=x+1;
}
//console.log(x);// 在函数体外不可引用该变量：
function fo1(){
    var x=1;
    x=x+1;
}
function fo2(){
    var x='A';
    x=x+'B';
}
//由于JavaScript的函数可以嵌套，此时，内部函数可以访问外部函数定义的变量，反过来则不行：
function fo3(){
    var x=1;
    function bar(){
        var y=x+1;
        var z=y+1;
    }
}
//这说明JavaScript的函数在查找变量时从自身函数定义开始，从“内”向“外”查找。
//如果内部函数定义了与外部函数重名的变量，则内部函数的变量将“屏蔽”外部函数的变量
function fo5(){
    var xz=1;
    function bar1(){
        var xz = 'A';
        console.log('小红');
    }
    console.log('小亮');
    bar1();
}
fo5();
//语句var x = 'Hello, ' + y;并不报错，原因是变量y在稍后申明了。但是console.log显示Hello, undefined，说明变量y的值为undefined。
//这正是因为JavaScript引擎自动提升了变量y的声明，但不会提升变量y的赋值。
function fo6(){
    var x='hello '+y;
    console.log(x);
    var y='gril';
}
fo6();
function fo7(){
    var y='gril';
    var x='hello '+y;
   
    console.log(x);
}
fo7();
//JavaScript默认有一个全局对象window
//因此，直接访问全局变量course和访问window.course是完全一样的。
//var course ='小龙';
//alert(course);
//alert(window.course);

//function fo8(){
   // alert('oo1');
//}
//fo8();
//window.fo8();

//window.alert('调用window')
//var old_alert=window.alert;
//window.alert=function(){}
//alert('无法使用');


//window.alert=old_alert;
//alert('可以使用了');


//把自己的代码全部放入唯一的名字空间MYAPP中，会大大减少全局变量冲突的可能。
var a1={};
a1.name ='mymod'
a1.version=1.0;
console.log(a1);

a1.foo =function(){
    return 'foo'
}
//用let替代var可以申明一个块级作用域的变量：
function fo9(){
    var sum=0;
    for(let i=0;i<100;i++){
        sum+=i;
    }
    i+=1;
}

var b={};
b.print= function(){
    console.log('我是cm的文件b');
}